import { getCurrentInstance } from 'vue';
import { createStore } from 'vuex';
// vuexPersistedstate可在页面重新加载和重新冻结应用程序的状态
import createPersistedState from 'vuex-persistedstate';

export default createStore({
    state: {
        // 存储登录成功的用户信息,从localStorage中获取用户信息，但是这会存在同步一步问题
        // 存在这样的bug,用户登录时设置的userInfo会覆盖本地存储的userInfo，登录了但是会报错
        // 刷新页面之后才能正确从localStorage里面拿到正确的userInfo
        userInfo: null,

        // 存储聊天内容
        chatMessages:{},
        // 存储选择的用户的id
        selectedUserId:null
    },
    mutations: {
        // 设置用户信息
        setUserInfo(state, value) {
            state.userInfo = value;
        },

        // 退出登录，清空userInfo
        // clearUserInfo(state) {
        //     state.userInfo = {};
        // },
        // 设置聊天列表
        setChatMessages(state,{userId,messages}){
            state.chatMessages[userId] = messages;
        },
        // 添加用户的聊天信息
        addMessage(state,{userId,message}){
            // 不存在用户，为新用户创建新的数据，存储聊天记录
            if(!state.chatMessages[userId]){
                //
                state.chatMessages[userId] = []
            }

            // 存在
            state.chatMessages[userId].push(message);
        },

        // 设置已选择的用户的id，用于查找对应的聊天数组
        setSelectedUser(state,userId){
            state.selectedUserId = userId
        }
    },
    actions: {
        // 初始化用户信息
        initializeUserInfo({ commit }) {
            const userInfo = JSON.parse(localStorage.getItem('userInfo'));
            commit('setUserInfo', userInfo);
        },
        // 登录设置localstorage
        login({ commit }, userData) {
            localStorage.setItem('userInfo', JSON.stringify(userData));
            commit('setUserInfo', userData);
        },
        // 退出登录，删除
        logout({ commit }) {
            localStorage.removeItem('userInfo');
            commit('setUserInfo', null);
        },

        // 选择的用户
        selectUser({commit},userId){
            commit('setSelectedUser',userId)
        },

        // 发送消息
        sendMessage({commit,state},{message,senderId}){
            const newMessage = {
                senderId:senderId,
                content:message,
                
                timestamp:new Date()
            };
            commit('addMessage',{userId:state.selectedUserId,message:newMessage})
        }
    },
    getters:{
        // 拿到对应的好友聊天信息
        getCurrentUserMessages:(state) =>{
            return state.selectedUserId ? state.chatMessages[state.selectedUserId] || []:[];
        }
    },
    modules: {},
    plugins: [
        createPersistedState({
            paths: ['userInfo','chatMessages'], // 控制是否持久化
        }),
    ],
});
